package it.traveldream.viewer;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import it.traveldreamClient.auxiliary.Input;
import it.traveldreamClient.beans.ClientManagerInterface;
import it.traveldreamClient.beans.ComponentiMgrBeanInterface;
import it.traveldreamClient.beans.UserMgr;
import it.traveldreamClient.beans.dto.AlloggioDTO;
import it.traveldreamClient.beans.dto.ComponenteDTO;
import it.traveldreamClient.beans.dto.ComponenteNuovoTipoTrasportoDTO;
import it.traveldreamClient.beans.dto.EscursioneDTO;
import it.traveldreamClient.beans.dto.NuovoTipoTrasportoDTO;
import it.traveldreamClient.beans.dto.PkgDTO;
import it.traveldreamClient.beans.dto.PkgPersonalDTO;
import it.traveldreamClient.beans.dto.TrasportoDTO;
import it.traveldreamClient.beans.dto.VoloDTO;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

@ManagedBean(name="visualizzacmp")
@SessionScoped
public class VisualizzaComponenti {

	@EJB
	private ComponentiMgrBeanInterface cmp;
	@EJB 
	private UserMgr usr;
	@EJB
	private ClientManagerInterface clm;
	
	private ComponenteDTO selectedComponente;
	private AlloggioDTO selectedAlloggio;
	private EscursioneDTO selectedEscursione;
	private TrasportoDTO selectedTrasporto;
	private VoloDTO selectedVolo;
	private ComponenteNuovoTipoTrasportoDTO selectedComponenteNuovoTipo;
	private NuovoTipoTrasportoDTO nuovoTipo;
	private boolean reg, elim, cm;
	private String str;
	private List<Input> attrList;

	
	
	public ComponenteNuovoTipoTrasportoDTO getSelectedComponenteNuovoTipo() {
		
		return selectedComponenteNuovoTipo;
	}

	public void setSelectedComponenteNuovoTipo(
			ComponenteNuovoTipoTrasportoDTO selectedComponenteNuovoTipo) {
		this.selectedComponenteNuovoTipo = selectedComponenteNuovoTipo;
	}

	public ComponenteDTO getSelectedComponente() {
		return selectedComponente;
	}

	public void setSelectedComponente(ComponenteDTO selectedComponente) {
		this.selectedComponente = selectedComponente;
	}
	
	public String acquista(){
		
		if(selectedComponente instanceof AlloggioDTO){
			usr.acquista(selectedAlloggio.getIdProdotto());
		} else if(selectedComponente instanceof EscursioneDTO){
			usr.acquista(selectedEscursione.getIdProdotto());
		} else if (selectedComponente instanceof VoloDTO){
			usr.acquista(selectedTrasporto.getIdProdotto());
		} else {
			usr.acquista(selectedComponenteNuovoTipo.getIdProdotto());
		}
		return "/user/acquistoAvvenuto?faces-redirect=true";
		
	}
	public String showCmp(){
		System.out.println("kkkkkkkkkkkkkkkkkkkkkkkkkk"+selectedComponente.toString());

		if(selectedComponente instanceof AlloggioDTO)
			return "/share/viewAlloggio?faces-redirect=true";
		else if(selectedComponente instanceof EscursioneDTO)
			return "/share/viewEscursione?faces-redirect=true";
		else if (selectedComponente instanceof VoloDTO)
			return "/share/viewVolo?faces-redirect=true";
		else{
			selectedComponenteNuovoTipo=(ComponenteNuovoTipoTrasportoDTO) selectedComponente;
			nuovoTipo=selectedComponenteNuovoTipo.getTipoDTO();
			attrList=new LinkedList<Input>();
			for(int i=0;i<nuovoTipo.getLabelTextAreas().size();i++){
				attrList.add(new Input(nuovoTipo.getLabelTextAreas().get(i),
				selectedComponenteNuovoTipo.getValoriDaTextAreas().get(i)));
			}
			return "/share/viewComponenteNuovoTipo?faces-redirect=true";
		}
	}
	public String eliminaComponente(){
		cmp.deleteComponente(selectedComponente.getIdProdotto());
    	return "/employ/index?faces-redirect=true";

	}

	public AlloggioDTO getSelectedAlloggio() {
		selectedAlloggio = (AlloggioDTO)selectedComponente;
		return selectedAlloggio;
	}

	public void setSelectedAlloggio(AlloggioDTO selectedAlloggio) {
		this.selectedAlloggio = selectedAlloggio;
	}

	public EscursioneDTO getSelectedEscursione() {
		selectedEscursione = (EscursioneDTO)selectedComponente;
		return selectedEscursione;
	}

	public void setSelectedEscursione(EscursioneDTO selectedEscursione) {
		this.selectedEscursione = selectedEscursione;
	}

	public TrasportoDTO getSelectedTrasporto() {
		selectedTrasporto = (TrasportoDTO)selectedComponente;
		return selectedTrasporto;
	}

	public void setSelectedTrasporto(TrasportoDTO selectedTrasporto) {
		this.selectedTrasporto = selectedTrasporto;
	}

	public boolean isElim() {
		if(usr.getUrlRole().equals("user")) 
			elim=false; 
		else 
			elim=true; 
		return elim;
	}

	public void setElim(boolean elim) {
		this.elim = elim;
	}

	public List<Input> attrList(){
		if(selectedComponenteNuovoTipo.getValoriDaTextAreas().isEmpty()){
			return null;
		}else{
			List<Input> list=new LinkedList<Input>();
			for(int i=0;i<nuovoTipo.getLabelTextAreas().size();i++){
				list.add(new Input(nuovoTipo.getLabelTextAreas().get(i),
						selectedComponenteNuovoTipo.getValoriDaTextAreas().get(i)));
			}
			
			return list;
		}
	}
	public boolean isReg() {
		if(usr.getUrlRole().equals("user"))
			reg=true;
		else
			reg=false;
		return reg;
	}


	public void setReg(boolean reg) {
		this.reg = reg;
	}


	public boolean isCm() {
		if(usr.getUrlRole().equals("user")) 
			cm=true; 
		else 
			cm=false; 
		return cm;
	}

	public void setCm(boolean cm) {
		this.cm = cm;
	}

	public String getStr() {
		return str;
	}

	public void setStr(String str) {
		this.str = str;
	}
	public String regali(){
		clm.aggiungiAGiftList(selectedComponente.getIdProdotto(), usr.getMailActualUser());
    	return "/user/index?faces-redirect=true";
	}

	public List<Input> getAttrList() {
		return attrList;
	}

	public void setAttrList(List<Input> attrList) {
		this.attrList = attrList;
	}
	
}
